#pragma once
#include "glm/glm.hpp"
#include "glm/gtc/matrix_transform.hpp"
#include "glm/gtc/type_ptr.hpp"
class Camera
{
public:
	static Camera& Get()
	{
		static Camera Instance;
		return Instance;
	}	

	void CallbackForKeyboardInput(struct GLFWwindow* window,unsigned int deltaTime);
	void CallbackForMouseInput(struct GLFWwindow* window, double xpos, double ypos);
	void CallbackForScrollInput(struct GLFWwindow* window,double xoffset, double yoffset);
	glm::mat4 GetLookAt();
	glm::vec3 GetFront();
	glm::mat4 GetProjection();
	glm::vec3 GetPosition();
private:
	Camera() = default;
	glm::vec3 cameraPos = glm::vec3(0.0f, 0.0f, 3.0f);
	glm::vec3 cameraFront = glm::vec3(0.0f, 0.0f, -1.0f);
	glm::vec3 cameraUp = glm::vec3(0.0f, 1.0f, 0.0f);

	float lastX = 400;
	float lastY = 300;

	float pitch = 0;
	float yaw = 0;

	float fov = 25;
};
